上一篇文章我们讲了许多MySQL的数据操作语言,但是看起来还是挺混乱的,所以我想将他们归纳一下。
数据定义语言
CREATE DATABASE 语法
我们使用 CREATE DATABASE 语句来创建数据库。以下是 CREATE DATABASE 语句的语法:
其中:
CREATE DATABASE和CREATE SCHEMA的是一样的。CREATE DATABASE后指定要创建的数据库的名字。IF NOT EXISTS表示在指定的数据库不存在的情况下才创建。它是可选的。
DROP DATABASE 语法
我们使用 DROP DATABASE 语句来删除数据库:
其中需要说明的点与 CREATE DATABASE 语句相同。
CREATE TABLE 语法
我们使用 CREATE TABLE 语句在数据库中创建一个新表。 CREATE TABLE 语句的语法如下:
其中:
CREATE TABLE语句创建一个给定名字 table_name 的表。- 表名可由字母、数字、下划线和美元符号组成,表名长度在 64 个字符以内。
- 表名在一个数据库中是唯一的。
- 新建的表会在当前默认的数据库中。如果还没有选择数据库,请使用
db_name.table_name格式指定要新建的表所在的数据库。
IF NOT EXISTS指示只有给定的表不存在的时候才进行创建。它是可选的。- 如果你给定一个已经存在的表名,又没有使用
IF NOT EXISTS子句,服务器会返回一个错误。
- 如果你给定一个已经存在的表名,又没有使用
column_name data_type [NOT NULL | NULL] [DEFAULT expr] [AUTO_INCREMENT]定义了表中的一列。多个列使用逗号分隔。column_name是列的名字。列名可由字母、数字、下划线和美元符号组成,列名长度在 64 个字符以内。列名在一个表中是唯一的。data_type是数据类型,可以是 CHAR, VARCHAR, INT, DATE, DATETIME, BIT, TEXT, ENUM, JSON, BOLB 等。[NOT NULL | NULL]指示该列是否可以为NULL。它是可选的。如果不指定该选项,则此列可以为NULL。如果设置为NOT NULL,则插入新行时该列必须有值。[DEFAULT expr]指示该列的默认值。它是可选的。如果不指定该选项,则此列的默认是 NULL。[AUTO_INCREMENT]指示该列是否是一个自增列。如果使用了此选项,则该列的值可有服务器自动产生和填充。该列的值从 1 开始,每增加一个行就会加 1。一个表中只能有一个自增列。
[table_constraints]位于列定义之后,它定义了表的约束。它是可选的。表的约束有主键、外键、CHECK、UNIQUE 等。- 当表名或者字段名中含有空格或者其他特殊字字符时,可使用
` 包围起来。比如:test 1``。(非标准语法)
DROP TABLE 语句语法
说明:
DROP TABLE关键字后面是要删除的表名。如果要删除多个表,请使用逗号分隔表名。IF EXISTS选项避免了删除不存在的表时发生的错误。它是可选的。- 当要删除的表中有不存在的表时:
- 有
IF EXISTS选项,不会对不存在的表报错。该语句会删除存在的表,并给出不存在的表的提示。 - 没有
IF EXISTS选项,该语句运行失败带有一个指示不能移除不存在的表的错误。该语句不会删除任何表。
- 有
- 当要删除的表中有不存在的表时:
DROP TABLE删除表的定义和表中的数据,以及表上触发器。- 你需要具有要删除的每一个表的
DROP权限。
ALTER TABLE 语法
其中 alter_action 是一个修改动作,包括:
ADD关键字可用来添加列、索引、约束等,包括:ADD [COLUMN]: 添加列ADD INDEX: 添加索引ADD PRIMARY KEY: 添加主键ADD FOREIGN KEY: 添加外键ADD UNIQUE INDEX: 添加唯一索引ADD CHECK: 添加检查约束
DROP关键字可用来删除列、索引、约束等,包括:DROP [COLUMN] col_name: 删除列ADD INDEX index_name: 删除索引DROP PRIMARY KEY: 删除主键DROP FOREIGN KEY fk_symbol: 删除外键DROP CHECK symbol: 删除检查约束
MODIFY关键字用来修改列的定义。与CHANGE关键字不同,它不能重命名列。例如:MODIFY [COLUMN] col_name column_definition。CHANGE关键字用来修改列的定义。与MODIFY关键字不同,它可以重命名列。例如:CHANGE [COLUMN] old_col_name new_col_name column_definition。RENAME 关键字可以重命名列、索引和表。包括:RENAME COLUMN old_col_name TO new_col_name: 重命名列。RENAME INDEX old_index_name TO new_index_name: 重命名索引。RENAME new_tbl_name: 重命名表。
数据操作语言
MySQL SELECT
说明:
- 关键字
SELECT后跟着一个或多个数据表的列。 columns_list可以有多个列,他们之间需要用逗号 , 分隔。- 当要检索数据表中的所有列的时候,使用
SELECT * FROM table_name。 - 关键字
FROM后跟着要从中检索数据的表名。 - 分号 ; 表示语句的结束,它是可选的。如果有两条或更多条语句,则需要使用分号 ; 将它们分开,以便 MySQL 单独执行每条语句。
SELECT是 MySQL 中用于读取数据的语言,相对来说挺重要的。
MySQL WHERE
WHERE 子句允许您为 SELECT 查询指定搜索条件。以下是 WHERE 子句的语法:
其中 query_condition 就是查询条件,它的结果是一个布尔值,其值可能为 TRUE, FALSE 或 UNKNOWN。最终, SELECT 语句返回的结果集就是满足查询条件结果为 TRUE 的记录。
查询条件一般用来比较某个字段是否匹配某个值,一般形式为:column_name = value
查询条件也可以是使用 AND , OR 和 NOT 逻辑运算符一个或多个表达式的组合。
除了用在 SELECT 语句之外, WHERE 子句还可以用在 UPDATE 和 DELETE 语句中,用来指定要更新或删除的行。
MySQL INSERT
我们可以使用一个 INSERT 语句插入一行或多行数据。基本插入语法为:
- 简单来说,就是使用
INSERT INTO和VALUES关键字来插入数据。 INSERT INTO后跟表名,而后是插入数据的列名列表。列名放在小括号中,多个列表使用逗号分隔。VALUES后跟需要存入的值,每个值列表使用小括号包围。值的数量要和字段的数量相同。值的位置和列的位置一一对应。- 当插入多行数据时,需要在除最后一个值列表的小括号后用
,分割,最后一个值列表后以;结尾。 INSERT语句会返回输入的行数。 ```sql INSERT INTO tablename VALUES (12, '小马'), (18, '企鹅');
INSERT INTO tablename (column2, column1) VALUES ('小马', 12), ('企鹅', 18);
sql CREATE TABLE user (
);
sql INSERT INTO user (name, age, birthday) VALUES ('迟然', 20, '2004-07-16');
+----+--------+------+------------+
| id | name | age | birthday |
+----+--------+------+------------+
| 1 | 迟然 | 20 | 2004-07-16 |
| 2 | 小白 | 21 | 2003-12-24 |
+----+--------+------+------------+ 2 rows in set (0.01 sec)
sql DROP TABLE IF EXISTS user; CREATE TABLE user ( id INT AUTOINCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, age INT, birthday DATE )AUTOINCREMENT = 5;
INSERT INTO user (name, age, birthday) VALUES ('迟然', 20, '2004-07-16');
INSERT INTO user (name, age, birthday) VALUES ('小白', 21, '2003-12-24');
+----+--------+------+------------+
| id | name | age | birthday |
+----+--------+------+------------+
| 5 | 迟然 | 20 | 2004-07-16 |
| 6 | 小白 | 21 | 2003-12-24 |
+----+--------+------+------------+ 2 rows in set (0.00 sec)
sql DELETE FROM tablename [WHERE clause] [ORDER BY ...] [LIMIT rowcount]
sql DELETE FROM tablename WHERE column2 = '企鹅';
sql UPDATE [IGNORE] table_name SET
[WHERE clause];
sql UPDATE tablename set column1 = 19 WHERE column2 = '小马';
sql CREATE TABLE name (
);
sql CREATE TABLE user (
);
sql CREATE TABLE user (
);
sql ALTER TABLE user ADD CONSTRAINT CHECK(age > 0);
sql CREATE TABLE user (
);
sql
CONSTRAINT fk_city_country FOREIGN KEY (country_id)